+use std::collections::HashSet;
+
use core::{Source, SourceId, SourceMap, Summary, Dependency, PackageId, Package};
use util::{CargoResult, ChainError, Config, human, profile};
fn query_overrides(&mut self, dep: &Dependency)
-> CargoResult<Vec<Summary>> {
+ let mut seen = HashSet::new();
let mut ret = Vec::new();
for s in self.overrides.iter() {
let src = self.sources.get_mut(s).unwrap();
let dep = Dependency::new_override(dep.get_name(), s);
- ret.push_all_move(try!(src.query(&dep)));
+ ret.extend(try!(src.query(&dep)).move_iter().filter(|s| {
+ seen.insert(s.get_name().to_string())
+ }));
}
Ok(ret)
}
assert_that(p.cargo_process("build"), execs().with_status(0));
})
+
+test!(override_path_dep {
+ let bar = project("bar")
+ .file("p1/Cargo.toml", r#"
+ [package]
+ name = "p1"
+ version = "0.5.0"
+ authors = []
+
+ [dependencies.p2]
+ path = "../p2"
+ "#)
+ .file("p1/src/lib.rs", "")
+ .file("p2/Cargo.toml", r#"
+ [package]
+ name = "p2"
+ version = "0.5.0"
+ authors = []
+ "#)
+ .file("p2/src/lib.rs", "");
+
+ let p = project("foo")
+ .file(".cargo/config", format!(r#"
+ paths = ['{}', '{}']
+ "#, bar.root().join("p1").display(),
+ bar.root().join("p2").display()))
+ .file("Cargo.toml", format!(r#"
+ [package]
+
+ name = "foo"
+ version = "0.5.0"
+ authors = ["wycats@example.com"]
+
+ [dependencies.p2]
+ path = '{}'
+
+ "#, bar.root().join("p2").display()))
+ .file("src/lib.rs", "");
+
+ bar.build();
+ assert_that(p.cargo_process("build").arg("-v"),
+ execs().with_status(0));
+
+})